iBatis核心框架淺析

您所在的位置:网站首页 ibatis in iBatis核心框架淺析

iBatis核心框架淺析

#iBatis核心框架淺析| 来源: 网络整理| 查看: 265

1.1 iBatis配置與運行java

1.dal 層的dao接口實現類一般會繼承SqlMapClientDaoSupport。spring容器在初始化一個dao bean實例時,一般會注入兩塊信息DataSource(數據源)和sqlMapClient(主要是sql語句),這兩塊信息會封裝到SqlMapClientTemplate。spring

2. 其中數據源的實例一般採用apache的開源項目dbcp。代碼配置以下:sql

3. sqlMapClient數據庫

接下來就到了數據持久層的代碼調用,全部的數據庫DML操做(增、刪、改、查)都是藉助於SqlMapClientTemplate來實現。apache

1.2 SQL MAP引擎實現&數據庫框架app

一、SqlMapClient,僅是層SqlMapSessionImpl淺淺的薄紗。在SqlMapSessionImpl中以實現update爲例:框架

會調用TransactionManager的doInTransaction方法:ide

二、TransactionManager經過JDBCTransactionConfig採用Bridge模式構建出JDBCTransactionthis

Java事務類型分紅三類:JDBC事務、JTA(Java Transaction API)、和容器事務,JDBC事務經過java.sql.Connection實現。batis中transaction.getExcutor()返回依賴transaction的執行對象。在Excutor中調用JDBCTransaction.getConnection()返回的便是java.sql.Connection()。idea

三、Excutor

Excutor採用命令模式、依賴transaction對象,負責將Connection和MappedStatement組裝到handler中執行insert、update等語句,SimpleExcutor、BatchExcutor等繼承自該接口。

四、JdbcTrasaction中DataSource

DataSource,是Connection的工廠類,用於維護一個鏈接池。ibatis中有幾種類型:SimpleDataSource,C3P0。

SimpleDataSource實現中包含兩個代理線程池:idleConnectionsPool和activeConnectionsPool,並利用Proxy模式實現Connection訪問遠程數據庫,經過popConnection和pushConnection

來申請和釋放一個Proxy。申請時,對於ideal爲空、active已滿的狀況,循環判斷是否有棧底的Proxy已超過checkNum,超過設置閾值則執行autoCommit()、或rollback()並釋放資源。同時注意檢查Proxy連接狀態。Proxy類爲PooledConnection,利用InvocationHandler實現代理:

1 class PooledConnection implements InvocationHandler { 2 3 public Object invoke(Object proxy, Method method, Object[] args) 4 5 throws Throwable { 6 7 String methodName = method.getName(); 8 9 if (CLOSE.hashCode() == methodName.hashCode() && CLOSE.equals(methodName)) { 10 11 dataSource.pushConnection(this); 12 13 return null; 14 15 } else { 16 17 if (method.getDeclaringClass() != Object.class) { 18 19 // throw an SQLException instead of a Runtime 20 21 checkConnection(); 22 23 } 24 25 return method.invoke(realConnection, args); 26 27 } // else 28 29 } // invoke 30 31 } // class

另外,C3P0是一個高效的開源JDBC鏈接池。Ibatis能夠支持C3P0的配置。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3